.TITLE TTYZ .IDENT /06.01/ ; ; Copyright (c) 1995-1999 by Mentec, Inc., U.S.A. ; All rights reserved ; ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED ; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ; ; ; 27-JAN-78 PETER WANNHEDEN ; ; PREVIOUSLY MODIFIED BY: ; ; P. WANNHEDEN ; C. F. SPITZ ; D. R. DONCHIN ; S. C. ADAMS ; T. LEKAS ; ; MODIFICATION HISTORY: ; ; L. KOGAN 18-JUN-86 6.01 ; LK710 -- INCLUDE 7-BIT CHARACTER LENGTH SUPPORT ; ; .PSECT MAP5 ; ;+ ; CONTROLLER-DEPENDENT ROUTINES FOR DZ-11. ;- ; ; .IF DF D$$Z11 ; EQUATED SYMBOLS ; ; DZ-11 REGISTER DEFINITIONS ; CSR = 0 ;CONTROL AND STATUS REG. RBUF = 2 ;RECEIVER BUFFER REG. (READ-ONLY) LPR = 2 ;LINE PARAMETER REG. (WRITE-ONLY) TCR = 4 ;TRANSMIT CONTROL REG. MSR = 6 ;MODEM STATUS REG. (READ-ONLY) TBUF = 6 ;TRANSMITTER BUFFER REG. (WRITE-ONLY) ; ; .ENABL LSB .IF DF T$$GMC!T$$SMC!D$$ZMD ;+ ; YZLPAR - GET/SET LINE PARAMETERS. ; ; INPUT: ; R0 BIT 15: 0 = SET SPEED ; 1 = GET SPEED ; BIT 13: 1 = SET 7-BIT CHARACTER LENGTH ; BIT 12: 1 = CHECK IF 7-BIT CHARACTER IS SUPPORTED ; BIT 11: 1 = SET SPEED SELECTED BY AUTO-BAUD DETECT LOGIC ; BIT 10: 1 = SET DEVICE DEPENDENT SPEED ; (USED FOR SETTING PARITY) ; BIT 9: 1 = GET/SET ANSWER SPEED ; IF SET SPEED: ; BITS 0-7: NEW SPEED PARAMETER (S.XXX SYMBOL) ; ; R1 Flow control status change flags. ; ; BIT 0: 1 = Enable input flow control. ; BIT 1: 1 = Disable input flow control. ; BIT 2: 1 = Enable output flow control. ; BIT 3: 1 = Disable output flow control. ; ; BITS 4-15: Reserved ; ; REGISTERS R2-R5 STANDARD FOR CONTROLLER-DEPENDENT ROUTINE. ; ; OUTPUT: ; IF GET SPEED REQUESTED: ; R4 POINTER TO DZ11 SPEED TABLE ; CC-C 0 ; ; IF SET SPEED REQUESTED: ; CC-C 0 IF OK ; 1 IF ILLEGAL SPEED SPECIFIED ; ; NOTE THAT THIS ROUTINE CAN BE EXECUTED AT BOTH SYSTEM STATE (IN RESPONSE ; TO A SF.GMC OR SF.SMC QIO) AND FROM THE INPUT INTERRUPT SERVICE ROUTINE (FOR ; AUTO-BAUD SPEED DETECT). ; ;- ; ; YZLPAR:: .IF DF D$$ZMD!T$$GMC!T$$SMC TST R1 ;Called for flow control change? BEQ 5$ ;If EQ no - go on. RETURN ;Not processed for DZ. 5$: BIT #20000,R0 ;CHECK IF WE VALIDATE 7-BIT CHAR. BEQ 7$ ;NO RETURN 7$: BIT #10000,R0 ;CHECK SET 7-BIT BEQ 8$ ;NO. SET SPEED-PARITY BR SETLN1 ;SET 7-BIT AND OTHER LINE PARAMETERS 8$: BIT #4000,R0 ;SET SPEED FOR AUTO-BAUD DETECT? BEQ 10$ ;N - JUMP BIT #2000,R0 ;SET DEVICE DEPENDENT SPEED? BEQ 20$ ;N - JUMP BIC #^C<17>,R0 ;CLEAR ALL BUT NEW SPEED BITS BR 40$ ;SET NEW SPEED 10$: ;REFERENCE LABEL .ENDC ;D$$ZMD!T$$GMC!T$$SMC .IF DF T$$GMC&T$$SMC TST R0 ;GET OR SET SPEED? BPL 20$ ;SET - JUMP .ENDC ;T$$GMC&T$$SMC .IF DF T$$GMC MOV #SPDZ,R4 ;POINT TO DZ11 SPEED TABLE RETURN ;RETURN WITH CC-C = 0 .ENDC ;T$$GMC .IF DF T$$SMC!D$$ZMD 20$: MOV R0,R4 ;COPY SPEED PARAMETERS BIC #177400,R0 ;CLEAR UPPER BYTE MOVB SPDZ-1(R0),R0 ;GET SPEED BITS SEC ;ASSUME ERROR BMI 30$ ;ILLEGAL SPEED - JUMP BIT #1000,R4 ;SET ANSWER SPEED? BEQ 40$ ;N - JUMP .IF DF D$$ZMD BICB #17,U.CW3+1-U.TSTA(R5) ;CLEAR OLD ANSWER SPEED BISB R0,U.CW3+1-U.TSTA(R5) ;SET NEW ANSWER SPEED CLC ;SHOW SUCCESS .ENDC ;D$$ZMD 30$: RETURN 40$: MOVB R0,U.CW3-U.TSTA(R5) ;SET NEW RECEIVE SPEED .IF DF R$$EIS ASH #4,R0 ;SHIFT BITS TO TRANSMIT SPEED POSITION .IFF ;R$$EIS ASL R0 ;SHIFT BITS TO TRANSMIT SPEED POSITION ASL R0 ; ASL R0 ; ASL R0 ; .ENDC ;R$$EIS BISB R0,U.CW3-U.TSTA(R5) ;SET NEW TRANSMIT SPEED .ENDC ;T$$SMC!D$$ZMD .ENDC ;T$$GMC!T$$SMC!D$$ZMD SETLN1: MOV U.CW3-U.TSTA(R5),R2 ;GET NEW SPEED AND PARITY BITS SETLIN: BIC #^C<140017>,R2 ;CLEAR EXTRANEOUS NONSENSE CMPB R2,#2 ;IS SPEED 110 BAUD OR LOWER? BGT 50$ ;N - JUMP BIS #20000,R2 ;Y - SET TWO STOP BITS 50$: SWAB R2 ;PUT BITS IN PROPER POSITION BIS #10030,R2 ;SET 8 BIT CHARACTERS AND TURN RECEIVER ON BISB U.UNIT-U.TSTA(R5),R2 ;SET LINE NUMBER BIT #S5.CLN,U.TST5-U.TSTA(R5) ;;;CHECK 7-BIT CHARACTERS BEQ 75$ ;;;NO LEAVE IT 8-BIT BIC #10,R2 ;;;SET 7-BIT 75$: MOV R2,LPR(R3) ;;;LOAD NEW LINE PARAMETERS CLC ;SHOW SUCCESS RETURN ; ; ;+ ; YZPWUP - POWER UP. ; ; INPUT: ; REGISTERS R2-R5 STANDARD FOR CONTROLLER-DEPENDENT ROUTINE. ; U.STS SET UP FOR LOCAL LINE: ; US.CRW 0 ; US.DSB 0 ;- ; ; .IF DF R$$CON YZCONL:: YZCPUP:: .IFF YZPWUP::TST R2 ;IS THIS LINE ZERO? BNE 70$ ;N - JUMP .IFTF MOV #20,@R3 ;Y - CLEAR SILO, UARTS, CONTROLLER 60$: BIT #20,@R3 ;DONE? BNE 60$ ;N - LOOP BIS #40140,@R3 ;Y - ENABLE INTERRUPTS .IFT RETURN YZUONL:: YZUPUP:: .ENDC ;R$$CON 70$: ;REFERENCE LABEL .IF DF D$$ZMD BIC #S5.ABP,U.TST5-U.TSTA(R5) ;RESET AUTO-BAUD MODE MOV R2,-(SP) ;SAVE R2 .IFTF ;D$$ZMD CALL SETLN1 ;SET INITIAL CHARACTERISTICS ;IN LINE PARAMETER REGISTER .IFT ;D$$ZMD MOV (SP)+,R2 ;RESTORE R2 BIT #U2.RMT,U.CW2-U.TSTA(R5) ;REMOTE LINE? BEQ 150$ ;N - RETURN BISB #US.CRW,U.STS-U.TSTA(R5) ;SET WAITING FOR CARRIER FLAG ; ; ;+ ; YZMTIM - MODEM TIMER. ; ; INPUT: ; REGISTERS R2-R5 STANDARD FOR CONTROLLER-DEPENDENT ROUTINE. ;- ; ; ; .IFTF ;D$$ZMD YZMTIM:: .IFT ;D$$ZMD MOV $BTMSK(R2),R2 ;GET BIT CORRESPONDING TO THIS LINE CALL LOCKI ;LOCK OUT INTERRUPTS CALL HLMTIM ;;;CALL COMMON MODEM TIMEOUT ROUTINE BEQ 80$ ;;;IF EQ Z-BIT SET - DROP DTR BISB R2,TCR+1(R3) ;;;SET DTR RETURN ;;; 80$: BICB R2,TCR+1(R3) ;;;DEASSERT DTR RETURN ; ; ;+ ; YZPOLL - POLL MODEM STATUS. ; ; INPUT: ; R5 POINTER TO U.TSTA ;- ; ; YZPOLL::MOV U.SCB-U.TSTA(R5),R3 ;GET SCB .IF DF R$$MPL MOV @S.KRB(R3),R3 ;GET CSR .IFF ;R$$MPL MOV S.CSR(R3),R3 ;GET CSR .ENDC ;R$$MPL MOVB U.UNIT-U.TSTA(R5),R2 ;GET PHYSICAL UNIT NUMBER ASL R2 ;MULTIPLY BY 2 MOV $BTMSK(R2),R2 ;GET BIT CORRESPONDING TO THIS LINE CLR R4 ;START OFF FRESH BITB R2,MSR(R3) ;RING ON? BEQ 90$ ;N - JUMP BIS #200,R4 ;Y - SET APPROPRIATE BIT 90$: BITB R2,MSR+1(R3) ;CARRIER ON? BEQ 100$ ;N - JUMP BIS #140,R4 ;Y - SET APPROPRIATE BIT 100$: MOV R2,-(SP) ;SAVE R2 DESTROYED BY MODISR ROUTINE CALL MODISR ;DO COMMON MODEM INTERRUPT PROCESSING BVC 120$ ;NO SPECIAL ACTION NEEDED - JUMP BCS 110$ ;DROP DTR - JUMP BISB (SP)+,TCR+1(R3) ;ASSERT DTR RETURN 110$: BICB (SP)+,TCR+1(R3) ;DEASSERT DTR RETURN 120$: MOV (SP)+,R2 ;POP STACK WITHOUT AFFECTING CC-C BCS 150$ ;NO CALL ANSWERED - RETURN ASSUME S4.ABD,100000 TST 6(R5) ;;;AUTO-BAUD SPEED DETECT ENABLED? BPL 130$ ;;;IF NOT, DON'T SET BAUD MOVB #14,R2 ;Y - SET LINE TO 4800 BAUD BR SETLIN ; 130$: MOVB U.CW3+1-U.TSTA(R5),R0 ;GET REMOTE ANSWER SPEED BICB #^C<17>,R0 ;CLEAR ALL BUT ANSWER SPEED FIELD BR 40$ ;SET THAT SPEED .ENDC ;D$$ZMD 150$: RETURN .DSABL LSB .IF DF R$$CON YZCOFF:: MOV #20,@R3 ;CLEAR SILO, UARTS, CONTROLLER 10$: BIT #20,@R3 ;DONE? BNE 10$ ;N - LOOP RETURN YZUOFF:: CLR -(SP) ;GET A TEMPORARY WORD BISB U.UNIT-U.TSTA(R5),(SP) ;SET LINE NUMBER BUT RECEIVER OFF MOV (SP)+,LPR(R3) ;LOAD NEW LINE PARAMETERS .IF DF D$$ZMD MOV $BTMSK(R2),R2 ;GET BIT CORRESPONDING TO THIS LINE BICB R2,TCR+1(R3) ;DROP DTR .ENDC ;D$$ZMD RETURN .ENDC ;R$$CON ; ; ;+ ; INPUT INTERRUPT SERVICE ROUTINE. ;- ; ; .ENABL LSB ; .IF DF R$$MPL $YZINP::TTSET$ YZ ;;;SAVE R2, R3 AND SET UP: ;;; R3 = CSR ADDRESS ;;; R4 = KRB ADDRESS .IFF ;R$$MPL $DZINP::TTSET$ DZ ;;;SAVE R2,R3 AND SET UP ;;; R3 = CSR ;;; R4 = ADDRESS OF UCB LIST .ENDC ;R$$MPL CALL MUXINP ;;;DO COMMON MULTIPLEXER INPUT ;;;CHARACTER PROCESSING ;;;MUXINP DISMISSES INTERRUPT IF NO OUTPUT WORK BR 10$ ;;;XMIT READY - GO DO OUTPUT WORK ; ; ;+ ; OUTPUT INTERRUPT SERVICE ROUTINE. ;- ; ; .IF DF R$$MPL $YZOUT::TTSET$ YZ ;;;SAVE R2, R3 AND SET UP: ;;; R3 = CSR ADDRESS ;;; R4 = KRB ADDRESS .IFF ;R$$MPL $DZOUT::TTSET$ DZ ;;;SAVE R2,R3 AND SET UP ;;; R3 = CSR ;;; R4 = ADDRESS OF UCB LIST .ENDC ;R$$MPL 10$: MOV R3,-(SP) ;;; INC @SP ;;;POINT TO BYTE CONTAINING ;;;INTERRUPTING LINE NUMBER (CSR HIGH BYTE) CALL JZOUT ;;;DO OUTPUT INTERRUPT PROCESSING ;;;(COMMON FOR DJ-11 AND DZ-11) TST (SP)+ ;;;CLEAN STACK ; ; ;+ ; YZABOX - ABORT OUTPUT. ; ; INPUT: ; REGISTERS R2-R5 STANDARD FOR CONTROLLER-DEPENDENT ROUTINE. ; U.TOC 0 ; U.TTOC 0 ; ; YZSTOX - STOP OUTPUT. ; ; INPUT: ; REGISTERS R2-R5 STANDARD FOR CONTROLLER-DEPENDENT ROUTINE. ; S1.CTS 1 ;- ; ; YZABOX:: YZSTOX::RETURN ;;;RETURN ; .DSABL LSB .ENDC ;D$$Z11 ; ; .END